﻿Imports System.Data
Imports System.Data.OleDb
Imports validaciones.metodos

Public Class ClientesAnimales

    Public validar As New validaciones.metodos
    Public conexion As New OleDb.OleDbConnection("Provider=Microsoft.ACE.Oledb.12.0; Data Source=nuevozoo.accdb")

    'para clientes
    Public adaptador2 As New OleDbDataAdapter("select * from clientes", conexion)
    Public miDataset2 As New DataSet


    Private Sub BotonesHabilitados(ByVal modo As Boolean)
        b_añadiran.Enabled = modo
        b_eliminaran.Enabled = modo
        b_modificaran.Enabled = modo
        b_nuevoan.Enabled = modo

        b_modificarcli.Enabled = modo
        b_eliminarcli.Enabled = modo
        b_añadircli.Enabled = modo
        b_nuevocli.Enabled = modo
    End Sub

    Private Sub ClientesAnimales_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'textboxs de codigos estan inhabilitados
        text_codan.Enabled = False
        text_codcli.Enabled = False
        text_clientean.Enabled = False

        'CLIENTES---------------------------------------------------------------------

        'rellenar datagriview
        adaptador2.Fill(miDataset2, "clientes")
        DataGridViewClientes.DataSource = miDataset2
        DataGridViewClientes.DataMember = "clientes"

        'cambiar tamaño de las columnas
        DataGridViewClientes.Columns("nombre").Width = 200
        DataGridViewClientes.Columns("dni").Width = 100

        'ocultar columnas para que solo se vean el nombre del animal y del dueño
        DataGridViewClientes.Columns("cod_cliente").Visible = False
        DataGridViewClientes.Columns("direccion").Visible = False
        DataGridViewClientes.Columns("telefono").Visible = False
        DataGridViewClientes.Columns("observaciones").Visible = False

        'rellenar textbox
        text_codcli.DataBindings.Add("text", miDataset2, "clientes.cod_cliente")
        text_nombrecli.DataBindings.Add("text", miDataset2, "clientes.nombre")
        text_dni.DataBindings.Add("text", miDataset2, "clientes.dni")
        text_direc.DataBindings.Add("text", miDataset2, "clientes.direccion")
        text_tel.DataBindings.Add("text", miDataset2, "clientes.telefono")
        text_obs.DataBindings.Add("text", miDataset2, "clientes.observaciones")

    End Sub

    'método para personalizar los datagrid
    'Private Sub DataGridView1_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
    '    e.CellStyle.BackColor = Color.AliceBlue
    'End Sub

    Private Sub cargarDataGridAnimales()
        'limpiar DataBlindings para que no de error 
        text_codan.DataBindings.Clear()
        text_nombrean.DataBindings.Clear()
        text_clientean.DataBindings.Clear()
        text_vetan.DataBindings.Clear()
        text_especie.DataBindings.Clear()
        text_raza.DataBindings.Clear()

        'nombre cliente seleccionado
        Dim nombrecli As String = DataGridViewClientes.CurrentCell.Value.ToString

        'para animales
        Dim adaptador As New OleDbDataAdapter("SELECT animales.nombre, clientes.nombre as Expr1, animales.cod_animal, animales.dueño, animales.veterinario, animales.especie, animales.raza FROM (animales INNER JOIN clientes ON animales.dueño = clientes.cod_cliente) WHERE clientes.nombre= '" & nombrecli & "'", conexion)
        Dim miDataset As New DataSet

        'ANIMALES---------------------------------------------------------------------

        'rellenar datagriview
        adaptador.Fill(miDataset, "animales")
        DataGridViewAnimales.DataSource = miDataset
        DataGridViewAnimales.DataMember = "animales"

        'cambiar tamaño de las columnas
        DataGridViewAnimales.Columns("Expr1").Width = 200
        DataGridViewAnimales.Columns("nombre").Width = 100
        'cambiar nombre de las cabeceras de la tabla
        DataGridViewAnimales.Columns("nombre").HeaderText = "Animal"
        DataGridViewAnimales.Columns("Expr1").HeaderText = "Dueño"

        'ocultar columnas para que solo se vean el nombre del animal y del dueño
        DataGridViewAnimales.Columns("cod_animal").Visible = False
        DataGridViewAnimales.Columns("dueño").Visible = False
        DataGridViewAnimales.Columns("especie").Visible = False
        DataGridViewAnimales.Columns("raza").Visible = False
        DataGridViewAnimales.Columns("veterinario").Visible = False

        'rellenar textbox
        text_codan.DataBindings.Add("text", miDataset, "animales.cod_animal")
        text_nombrean.DataBindings.Add("text", miDataset, "animales.nombre")
        text_clientean.DataBindings.Add("text", miDataset, "animales.dueño")
        text_vetan.DataBindings.Add("text", miDataset, "animales.veterinario")
        text_especie.DataBindings.Add("text", miDataset, "animales.especie")
        text_raza.DataBindings.Add("text", miDataset, "animales.raza")

    End Sub

    Private Sub b_nuevocli_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_nuevocli.Click
        'bloqueo los datagridview para que no se pueda modificar a pincho
        DataGridViewClientes.Enabled = False
        DataGridViewAnimales.Enabled = False

        'desbloqueo el boton añadir que viene bloqueado por defecto dejando el resto bloqueados
        BotonesHabilitados(False)
        b_añadircli.Enabled = True

        text_codcli.Text = "Se autorrellena"
        text_nombrecli.Text = ""
        text_dni.Text = ""
        text_direc.Text = ""
        text_tel.Text = ""
        text_obs.Text = ""
    End Sub

    Private Sub DataGridViewClientes_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridViewClientes.CellContentClick
        b_nuevoan.Enabled = True
        b_eliminaran.Enabled = True
        b_modificaran.Enabled = True
        cargarDataGridAnimales()

    End Sub

    Private Sub b_nuevoan_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_nuevoan.Click
        'bloqueo los datagridview para que no se pueda modificar a pincho
        DataGridViewAnimales.Enabled = False
        DataGridViewClientes.Enabled = False

        'desbloqueo el boton añadir que viene bloqueado por defecto dejando el resto bloqueados
        BotonesHabilitados(False)
        b_añadiran.Enabled = True

        text_codan.Text = "Se autorrellena"
        text_nombrean.Text = ""
        text_clientean.Text = text_codcli.Text 'se rellena con el valor del cliente seleccionado
        text_vetan.Text = ""
        text_especie.Text = ""
        text_raza.Text = ""

    End Sub

    Private Sub b_añadircli_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_añadircli.Click

        'sacar ultimo codigo de clientes usado
        Dim cmd As New OleDbCommand("select max(cod_cliente) from clientes", conexion)
        conexion.Open()
        Dim a As Object = cmd.ExecuteScalar
        Dim codMaxUsado As String = a.ToString
        Dim codNuevo As Integer = codMaxUsado + 1 'codigo del nuevo registro
        conexion.Close()


        'añadir nuevo registro de cliente
        If text_nombrecli.Text <> "" And text_dni.Text <> "" And text_direc.Text <> "" And _
        text_tel.Text <> "" Then
            If validar.dni(text_dni.Text) Then
                If text_tel.Text.Length = 9 And validar.numeros(text_tel.Text) Then

                    Dim cb As New OleDbCommandBuilder(adaptador2)
                    adaptador2.InsertCommand = cb.GetInsertCommand
                    Dim mitabla As DataTable = miDataset2.Tables("clientes")
                    Dim dr As DataRowCollection = mitabla.Rows
                    Dim nuevafila As DataRow
                    nuevafila = mitabla.NewRow
                    dr.Add(codNuevo, text_nombrecli.Text, text_dni.Text, text_direc.Text, text_tel.Text, text_obs.Text)
                    adaptador2.Update(mitabla)

                Else
                    MsgBox("El formato del teléfono incorrecto", , "Error")
                End If
            Else
                MsgBox("El formato del DNI es incorrecto", , "Error")
            End If
        Else
            MsgBox("Sólo el campo de observaciones puede estar vacío", , "Error")
        End If

        miDataset2.Clear()

        'recargar datagridview
        adaptador2.Fill(miDataset2, "clientes")
        DataGridViewClientes.DataSource = miDataset2
        DataGridViewClientes.DataMember = "clientes"

        'deshabilito el boton añadir nuevamente y habilito los datagridview y demas botones
        BotonesHabilitados(True)
        b_añadircli.Enabled = False
        b_añadiran.Enabled = False
        DataGridViewClientes.Enabled = True
        DataGridViewAnimales.Enabled = True

    End Sub

    Private Sub b_añadiran_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_añadiran.Click

        'sacar ultimo codigo de animales usado
        Dim cmd As New OleDbCommand("select max(cod_animal) from animales", conexion)
        conexion.Open()
        Dim a As Object = cmd.ExecuteScalar
        Dim codMaxUsado As String = a.ToString
        Dim codNuevo As Integer = codMaxUsado + 1 'codigo del nuevo registro

        Dim codDueño As Integer = text_clientean.Text
       
        If text_nombrean.Text <> "" And text_vetan.Text <> "" And text_especie.Text <> "" And _
        text_raza.Text <> "" Then
            If text_vetan.Text = text_vetan.Items(0).ToString Or text_vetan.Text = text_vetan.Items(1).ToString Then
                'introducir nuevo registro
                Dim myCommand As OleDbCommand
                myCommand = New OleDbCommand("INSERT INTO animales VALUES(" & codNuevo & ",'" & text_nombrean.Text & "'," & codDueño & ",'" & text_vetan.Text & "','" & text_especie.Text & "','" & text_raza.Text & "' )", conexion)
                myCommand.ExecuteNonQuery()
            Else
                MsgBox("Seleccionar un veterinario de las opciones", , "Error")
            End If
        Else
            MsgBox("Los campos no pueden estar vacíos", , "Error")
        End If
        conexion.Close()
        cargarDataGridAnimales()

        'deshabilito el boton añadir nuevamente y habilito los datagridview y demas botones
        BotonesHabilitados(True)
        b_añadiran.Enabled = False
        b_añadircli.Enabled = False
        DataGridViewAnimales.Enabled = True
        DataGridViewClientes.Enabled = True

    End Sub

    Private Sub b_eliminarcli_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_eliminarcli.Click
        'borrar el cliente seleccionado con sus datos
        Dim cb As New OleDbCommandBuilder(adaptador2)
        adaptador2.DeleteCommand = cb.GetDeleteCommand
        Dim mitabla As DataTable = miDataset2.Tables("clientes")

        Dim res As Integer
        res = MsgBox("¿Está seguro de borrar el cliente, sus animales y todos sus datos?", MsgBoxStyle.YesNo, "aviso")
        If res = vbYes Then
            If (BindingContext(miDataset2, "clientes").Count > 0) Then
                BindingContext(miDataset2, "clientes").RemoveAt(BindingContext(miDataset2, "clientes").Position)
            End If
        End If

        adaptador2.Update(mitabla)
        miDataset2.Clear()
        adaptador2.Fill(miDataset2, "clientes")
        DataGridViewClientes.DataSource = miDataset2
        DataGridViewClientes.DataMember = "clientes"
    End Sub

    Private Sub b_eliminaran_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_eliminaran.Click
        'borrar el animal seleccionado con sus datos
        Dim res As Integer
        res = MsgBox("¿Está seguro de borrar el animal y todos sus datos?", MsgBoxStyle.YesNo, "aviso")
        If res = vbYes Then
            conexion.Open()
            Dim myCommand As OleDbCommand
            myCommand = New OleDbCommand("delete from animales where cod_animal = " & text_codan.Text, conexion)
            myCommand.ExecuteNonQuery()
            conexion.Close()
            cargarDataGridAnimales()
        End If

    End Sub

    Private Sub b_modificarcli_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_modificarcli.Click
        'modificar el cliente seleccionado

        If text_nombrecli.Text <> "" And text_dni.Text <> "" And text_direc.Text <> "" And _
        text_tel.Text <> "" Then
            If validar.dni(text_dni.Text) Then
                If text_tel.Text.Length = 9 And validar.numeros(text_tel.Text) Then

                    Dim res As Integer
                    res = MsgBox("¿Está seguro de modificar el cliente?", MsgBoxStyle.YesNo, "aviso")
                    If res = vbYes Then
                        conexion.Open()
                        Dim myCommand As OleDbCommand
                        myCommand = New OleDbCommand("Update clientes set nombre ='" & text_nombrecli.Text & "', dni ='" & text_dni.Text & "', direccion = '" & text_direc.Text & "', telefono = '" & text_tel.Text & "', observaciones ='" & text_obs.Text & "' where cod_cliente = " & text_codcli.Text, conexion)
                        myCommand.ExecuteNonQuery()
                        conexion.Close()

                    End If

                Else
                    MsgBox("El formato del teléfono incorrecto", , "Error")
                End If
            Else
                MsgBox("El formato del DNI es incorrecto", , "Error")
            End If
        Else
            MsgBox("Sólo el campo de observaciones puede estar vacío", , "Error")
        End If

        'volver a cargar el datagridview de clientes
        Dim mitabla As DataTable = miDataset2.Tables("clientes")
        adaptador2.Update(mitabla)
        miDataset2.Clear()
        adaptador2.Fill(miDataset2, "clientes")
        DataGridViewClientes.DataSource = miDataset2
        DataGridViewClientes.DataMember = "clientes"

    End Sub


    Private Sub b_modificaran_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_modificaran.Click
        'modificar el animal seleccionado
        If text_nombrean.Text <> "" And text_vetan.Text <> "" And text_especie.Text <> "" And _
        text_raza.Text <> "" Then
            If text_vetan.Text = text_vetan.Items(0).ToString Or text_vetan.Text = text_vetan.Items(1).ToString Then

                Dim res As Integer
                res = MsgBox("¿Está seguro de modificar el animal?", MsgBoxStyle.YesNo, "aviso")
                If res = vbYes Then
                    conexion.Open()
                    Dim myCommand As OleDbCommand
                    myCommand = New OleDbCommand("Update animales set nombre ='" & text_nombrean.Text & "', dueño ='" & text_clientean.Text & "', veterinario = '" & text_vetan.Text & "', especie = '" & text_especie.Text & "', raza ='" & text_raza.Text & "' where cod_animal = " & text_codan.Text, conexion)
                    myCommand.ExecuteNonQuery()
                    conexion.Close()
                End If

            Else
                MsgBox("Seleccionar un veterinario de las opciones", , "Error")
            End If
        Else
            MsgBox("Los campos no pueden estar vacíos", , "Error")
        End If

            cargarDataGridAnimales()
    End Sub

    Private Sub VolverToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VolverToolStripMenuItem.Click
        Me.Close()
        GestionGeneral.Show()
    End Sub

    Private Sub ClientesToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ClientesToolStripMenuItem.Click
        VerReportCliente.ShowDialog()
    End Sub

    Private Sub AnimalesToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AnimalesToolStripMenuItem.Click
        VerReportAnimales.ShowDialog()
    End Sub
End Class